package example.simple_mindmap.common.utils;


import cn.hutool.core.util.StrUtil;

/**
 * @author 虎哥
 */
public class RegexUtil {

    /**
     * 手机号正则
     */
    public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";
    /**
     * 邮箱正则
     */
    public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
    /**
     * 账号正则。6~20位的字母、数字和一些特殊字符（! @ # $ % ^ & * .）
     */
    public static final String USERNAME_REGEX = "^[A-Za-z0-9!@#\\$%\\^&\\*.]{6,20}$";
    /**
     * 密码正则。6~20位的字母、数字和一些特殊字符（! @ # $ % ^ & * .）
     */
    public static final String PASSWORD_REGEX = "^[A-Za-z0-9!@#\\$%\\^&\\*.]{6,20}$";
    /**
     * 验证码正则, 6位数字或字母
     */
    public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$";
    /**
     * UUID正则
     */
    public static final String UUID_REGEX = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\n";


    /**
     * 是否是无效手机格式
     * @param phone 要校验的手机号
     * @return true:符合，false：不符合
     */
    public static boolean isPhoneInvalid(String phone){
        return mismatch(phone, PHONE_REGEX);
    }
    /**
     * 是否是无效邮箱格式
     * @param email 要校验的邮箱
     * @return true:符合，false：不符合
     */
    public static boolean isEmailInvalid(String email){
        return mismatch(email, EMAIL_REGEX);
    }

    /**
     * 是否是无效验证码格式
     * @param code 要校验的验证码
     * @return true:符合，false：不符合
     */
    public static boolean isCodeInvalid(String code){
        return mismatch(code, VERIFY_CODE_REGEX);
    }
    /**
     * 是否是无效验账号格式
     * @param username 要校验的账号
     * @return true:符合，false：不符合
     */
    public static boolean isUsernameInvalid(String username){
        return mismatch(username, USERNAME_REGEX);
    }
    /**
     * 是否是无效密码格式
     * @param password 要校验的密码
     * @return true:符合，false：不符合
     */
    public static boolean isPasswordInvalid(String password){
        return mismatch(password, PASSWORD_REGEX);
    }

    /**
     * 是否是无效UUID格式
     * @param password 要校验的UUID
     * @return true:符合，false：不符合
     */
    public static boolean isUUIDInvalid(String password){
        return mismatch(password, UUID_REGEX);
    }

    // 校验是否不符合正则格式
    private static boolean mismatch(String str, String regex){
        if (StrUtil.isBlank(str)) {
            return true;
        }
        return !str.matches(regex);
    }
}
